home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1992 June: ROMin Holiday / ADC Developer CD (1992-06) (''ROMin Holiday'')_iso / Developer Connection - 06-1992.iso / Development Platforms / Apple II / Essentials / SANE / SANE1 / A2X.LOADER < prev    next >
Encoding:
Text File  |  1985-11-07  |  5.6 KB  |  126 lines  |  [TEXT/pdos]

  1. ;----------------------------------------------------------------------
  2. ; LANGUAGE CARD LOADER                                                 |
  3. ;                                                                      |
  4. ; Copyright Apple Computer, Inc. 1984, 1985
  5. ; All Rights Reserved
  6. ;                                                                      |
  7. ; * This file is for the assembly language programmer who cannot       |
  8. ;     assume that SANE is preloaded by the user.  It gives the         |
  9. ;     programmer the capability to load SANE directly, and might be    |
  10. ;     included as part of a stand-alone package designed to boot,      |
  11. ;     load SANE, and run.                                              |
  12. ;                                                                      |
  13. ;                                                                      |
  14. ; * Soft-switches are used in several places in the assembly code      |
  15. ;     below.  For an explanation of what these switches do and how     |
  16. ;     to use them refer to the Apple // Reference Manual, pages 68-75. |
  17. ;                                                                      |
  18. ; * Assumes the file A2X.AFP.CODE has already been loaded at $1E00.    |
  19. ; * Assumes the file A2X.BANKSW.0 has already been loaded at $4200.    |
  20. ;        (Note: If bankswitching is not required, ignore (6) below.)   |
  21. ;                                                                      |
  22. ; * The disk version of A2X.AFP.CODE has 512 bytes of 'header'         |
  23. ;     information at the beginning of the file.  The actual code       |
  24. ;     starts $200 bytes into the file.  Therefore loading at $1E00     |
  25. ;     places the beginning of code at $2000.                           |
  26. ;                                                                      |
  27. ;                                                                      |
  28. ; * Moves code portion of A2X.AFP.CODE from $2000 to $E000.            |
  29. ; *   and A2X.BANKSW.0 from $4200 to top of language card, $FF80.      |
  30. ;          NOTE:  A2X.BANKSW.0 cannot be more than 126 bytes long.     |
  31. ;                                                                      |
  32. ; * The loader is broken into the modules:                             |
  33. ;                                                                      |
  34. ;  1.  READ/WRITE ENABLE LANGUAGE CARD RAM.                            |
  35. ;  2.  ENTRY TO AUXILIARY LANGUAGE CARD.                               |
  36. ;  3.  INITIALIZE STARTING ADDRESSES FOR MOVING CODE.                  |
  37. ;  4.  TRANSFER FP6502 TO LANGUAGE CARD.                               |
  38. ;  5.  TRANSFER BANKSWITCHER TO LANGUAGE CARD.                         |
  39. ;  6.  COPY INTERRUPT VECTOR FROM ROM TO RAM.                          |
  40. ;  7.  EXIT TO MAIN STACK/ZERO PAGE/LANGUAGE CARD.                     |
  41. ;  8.  RTS TO CALLER.                                                  |
  42. ;----------------------------------------------------------------------|
  43. ;
  44.  ORG $300 ;put it where you like, relocatable code.
  45. ;  
  46. ALTZP EQU $C009 ;soft switch
  47. MAINZP EQU $C008 ;soft switch
  48. MYSTATE EQU $C08X ;soft switch to return to user's state
  49. ;                                of RAM/ROM and 1st/2nd $D000 space.
  50. ;                                In Pascal, X=B. In ProDOS, usually X=A.
  51. BASESTART EQU $06 ;zero page, for indirect addressing.
  52. BASEEND EQU $08 ;zero page, for indirect addressing.
  53. ;
  54. ;------------------------------------------
  55. ; 1.   READ/WRITE ENABLE LANGUAGE CARD RAM.
  56. ;------------------------------------------
  57.  LDA $C08B ;soft switches.  See Apple //
  58.  LDA $C08B ;  Reference Manual for details.
  59. ;
  60. ;---------------------------------------
  61. ; 2.   ENTRY TO AUXILIARY LANGUAGE CARD.
  62. ;---------------------------------------
  63.  PHP  ;Current interrupt state on stack.
  64.  SEI  ;Disable interrupts while stack ptr bad.
  65.  STA ALTZP ;switch to auxiliary stack, zero page, lc.
  66. ;
  67. ;----------------------------------------------------
  68. ; 3.   INITIALIZE STARTING ADDRESSES FOR MOVING CODE.
  69. ;----------------------------------------------------
  70.  LDA #0 ;Note that $2000 and $E000 are hard-coded.
  71.  STA BASESTART
  72.  LDA #$20
  73.  STA BASESTART+1
  74.  LDA #$00
  75.  STA BASEEND
  76.  LDA #$E0
  77.  STA BASEEND+1
  78. ;
  79. ;---------------------------------------
  80. ; 4.   TRANSFER FP6502 TO LANGUAGE CARD. 
  81. ;---------------------------------------
  82.  LDX #$20 ;transfer 8K bytes (or 32 pages). 
  83. ENGINE LDY #0
  84. LOOP LDA (BASESTART),Y ;collect Y-th byte of engine.
  85.  STA (BASEEND),Y ;store at Y-th byte of page now loading.
  86.  INY  ;next Y.
  87.  BNE LOOP ;done with 256 bytes?
  88.  INC BASESTART+1 ;   if so, go on to next page of source.
  89.  INC BASEEND+1 ;   and of destination.
  90.  DEX
  91.  BNE ENGINE ;keep going if 32 pages not yet moved.
  92. ;
  93. ;---------------------------------------------
  94. ; 5.   TRANSFER BANKSWITCHER TO LANGUAGE CARD.
  95. ;---------------------------------------------
  96. ;  The last 128 bytes of memory are overwritten by the bankswitcher
  97. ;    and the interrupt vector.
  98.  LDY #$7D ;prepare to transfer 126 bytes.
  99. AGAIN LDA $4200,Y
  100.  STA $FF80,Y
  101.  DEY
  102.  BPL AGAIN
  103. ;
  104. ;--------------------------------------------
  105. ; 6.   COPY INTERRUPT VECTOR FROM ROM TO RAM.
  106. ;--------------------------------------------
  107.  LDA $C089 ;soft switch, read ROM, write RAM
  108.  LDA $FFFE ;get low byte from ROM
  109.  STA $FFFE ;  put it in RAM
  110.  LDA $FFFF ;get high byte from ROM
  111.  STA $FFFF ;  put it in RAM
  112.  LDA MYSTATE ;restore user state of high
  113.  LDA MYSTATE ;  address space ($D000-FFFF).
  114. ;
  115. ;------------------------------------------------
  116. ; 7.  EXIT TO MAIN STACK/ZERO PAGE/LANGUAGE CARD.
  117. ;------------------------------------------------
  118.  STA MAINZP
  119.  PLP  ;Restore original interrupt state.
  120. ;
  121. ;-------------------
  122. ; 8.  RTS TO CALLER.
  123. ;-------------------
  124.  RTS
  125.  
  126.